Hi,大家好,今天是第8天,我們接續昨天的作業,先把公開區域的 router 完成。
本程式目前預計有3個功能
行數 | 說明 |
---|---|
1 | 設定本程式之變數需經過宣告才可使用,node.js 預設可不事先宣告變數即可直接賦值,但是實際上這樣開發會有很多問題,例如說變數名稱打錯字時,系統認定錯字是一個新變數,直接初始化,在偵錯時會有找不完的問題,因此養成良好習慣,每一支程式加上「"use strict";」是很重要的 |
10~12 | 系統首頁之 routing,本身不做任何事情,直接顯示 index.ejs 畫面 |
17~24 | 用來顯示首頁上預定顯示的客服案件清單的ajax 程式。呼叫 casedao.getCases 方法,並傳輸空物件進去,預期該方法會將符合條件之客服紀錄資料取出,並以json 格式回傳,供前端程式呼叫之用 |
29~33 | 客服紀錄詳細資料的顯示頁面,接收傳入之guid後,直接顯示cases.ejs 之畫面,並將 guid 帶入,供後續前端使用 |
38~45 | 取得客服詳細資料之的ajax 程式,呼叫 casedao.getSingleCase 後,取回單筆的客服詳細資料,並以json 格式回傳前端使用 |
50~52 | 呼叫系統登入之畫面 |
第29行的 「/viewcase/:guid」與第38行的「/jsapi/caseinfo/:guid」的網址宣告方式是 express 自訂的參數化網址的宣告方式,:guid 可被任合文字所取代,並在 router 中以 「req.params.guid 」取得該文字
router.get("/viewcase/:guid", async (req, res, next) => {
res.render("cases", {
guid: req.params.guid
})
})
//呼叫 「/viewcase/aaa」=>> req.params.guid = aaa
//呼叫 「/viewcase/abcde123」 ==> req.params.guid = abcde123
/*
呼叫 「/viewcase/aaa/bbb」,HTTP 404,網址不存在,因為 /viewcase 只能接一層網頁名稱
若要設計多層參數網址,需設定成 /viewcase/:參數1/:參數2/:參數3…
*/
第22行與43行的功用是若呼叫 model 時,出現錯誤時,router直接回傳 http 500 的狀態碼,並送出錯誤訊息,前端之後可以捕捉狀態碼與錯誤訊息以進行例外處理
眾所周知,http傳輸有分 post、get 與其他多種傳輸方式,express在參數接收時會依照傳輸方式不同因而接收方式也不同,撰寫程式時需注意,在此簡單列出接收方式
我們今天完成了第一支 router 的規畫與雛形,並分享了我平常在規劃&撰寫 router 時的常用作法,明天預計會先行撰寫前端之頁面與骨架的 model 的功能,讓我們明天繼續吧